package qjc.d_子串;

import java.util.HashMap;

public class a_和为k的子数组 {
    /**
     * 初始化前缀和，初始化计数器，用于记录满足条件的子数组数量，
     * 使用哈希表存储前缀和及其出现的次数，初始化前缀和为0的情况，出现次数为1，
     * 遍历数组，计算当前前缀和，如果当前前缀和减去目标值在哈希表中存在，则将计数器加上对应次数，
     * 更新当前前缀和的出现次数
     */
    public int subarraySum(int[] nums, int k) {
        int pre = 0;
        int count = 0;
        HashMap<Integer,Integer> map = new HashMap<>();
        map.put(0,1);
        for (int i = 0; i < nums.length; i++) {
            pre += nums[i];
            if(map.containsKey(pre-k)){
                count += map.get(pre-k);
            }
            map.put(pre,map.getOrDefault(pre,0)+1);
        }
        return count;
    }
}
